package org.springcloud.wisdom.spring_02_classroom.bean;

/**
 * 定义了API响应的状态码和对应的消息。
 */
public enum ResultCode {
    // 成功状态码
    SUCCESS(200, "成功"),

    // 默认失败状态码
    COMMON_FAIL(999, "失败"),

    // 参数错误状态码范围：1000～1999
    PARAM_NOT_VALID(1001, "参数无效"),
    PARAM_IS_BLANK(1002, "参数为空"),
    PARAM_TYPE_ERROR(1003, "参数类型错误"),
    PARAM_NOT_COMPLETE(1004, "参数缺失"),

    // 用户错误状态码范围：2001～2099
    USER_NOT_LOGIN(2001, "用户未登录"),
    USER_ACCOUNT_EXPIRED(2002, "账号已过期"),
    USER_CREDENTIALS_ERROR(2003, "密码错误"),
    USER_CREDENTIALS_EXPIRED(2004, "密码过期"),
    USER_ACCOUNT_DISABLE(2005, "账号不可用"),
    USER_ACCOUNT_LOCKED(2006, "账号被锁定"),
    USER_ACCOUNT_NOT_EXIST(2007, "账号不存在"),
    USER_ACCOUNT_ALREADY_EXIST(2008, "账号已存在"),
    USER_ACCOUNT_USE_BY_OTHERS(2009, "账号下线"),

    // 业务错误状态码范围：4001～4099
    TOKEN_INVALID(4001, "token非法"),
    VALIDCODE_INVALID(4002, "验证码错误"),

    // 认证失败状态码：5001
    ACCESS_DENIED(5001, "认证失败"),

    // 权限错误状态码：3001
    NO_PERMISSION(3001, "没有权限");

    private Integer code;
    private String message;

    ResultCode(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 获取状态码。
     * @return 状态码。
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 设置状态码。
     * @param code 状态码。
     */
    public void setCode(Integer code) {
        this.code = code;
    }

    /**
     * 获取状态消息。
     * @return 状态消息。
     */
    public String getMessage() {
        return message;
    }

    /**
     * 设置状态消息。
     * @param message 状态消息。
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * 根据状态码获取对应的状态消息。
     *
     * @param code 状态码
     * @return 对应的状态消息，如果未找到则返回null。
     */
    public static String getMessageByCode(Integer code) {
        for (ResultCode resultCode : values()) {
            if (resultCode.getCode().equals(code)) {
                return resultCode.getMessage();
            }
        }
        return null;
    }
}